package com.chaodows.commons.dto.result;

/**
 * ============================
 *
 * @Author pengzhichao
 * @Description //TUDO $
 * @Date 2021/7/20 15:58
 * @Version 1.0
 * ============================
 **/
public enum ResultCode {

    /**
     * 成功状态码
     */
    SUCCESS(1, "成功"),

    /**
     * 失败状态码
     */
    FAIL(-1, "请求失败"),

    /**
     * 系统错误：1000-1999
     */
    SYSTEM_INNER_ERROR(1000, "系统内部错误。"),
    SYSTEM_INNER_RUNTIME_ERROR(1002, "系统内部运行期错误。"),
    SYSTEM_OTHER_ERROR(1003, "其它系统错误。"),
    SERVICE_INNER_ERROR(1004, "服务内部错误。"),

    /**
     * 数据错误：4000-4999
     */
    DATA_NOT_FOUND(4001, "数据未找到。"),
    DATA_IS_WRONG(4002, "数据有误。"),
    DATA_ALREADY_EXISTED(4003, "数据已存在。"),
    DATA_STORAGE_ERROR(4004, "数据保存失败。"),
    DATA_IS_NUll(4005, "参数不能为空");


    /**
     * 返回代码
     */
    private Integer code;
    /**
     * 返回消息
     */
    private String message;

    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer code() {
        return this.code;
    }

    public String message() {
        return this.message;
    }

    /**
     * 根据代码获取返回类型Enum
     * @param code
     * @return
     */
    public static ResultCode getResultCode(Integer code) {
        for (ResultCode item : ResultCode.values()) {
            if (item.code().equals(code)) {
                return item;
            }
        }
        return null;
    }

    /**
     * 获取类型信息
     * @param name
     * @return
     */
    public static String getMessage(String name) {
        for (ResultCode item : ResultCode.values()) {
            if (item.name().equals(name)) {
                return item.message;
            }
        }
        return name;
    }

    /**
     * 获取类型代码
     * @param name
     * @return
     */
    public static Integer getCode(String name) {
        for (ResultCode item : ResultCode.values()) {
            if (item.name().equals(name)) {
                return item.code;
            }
        }
        return null;
    }

    @Override
    public String toString() {
        return this.name();
    }

}